package com.rpss.fichamento.telas;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import com.rpss.fichamento.R;
import com.rpss.fichamento.dao.ObraDAO;
import com.rpss.fichamento.dao.RepositorioFichamento;
import com.rpss.fichamento.entidade.Obra;
import com.rpss.fichamento.fachada.FichamentoFachada;

public class ListarObrasActivity extends Activity {

	private static final String CATEGORIA = "fichamento";

	// Menu principal
	protected static final int INSERIR = 0;

	// Menu de contexto
	protected static final int EDITAR = 0;
	protected static final int REMOVER = 1;
	protected static final int EXPORTAR = 2;

	private List<Obra> obras;
	private ArrayList<String> str_obras;
	private Long idObraRemocao;
	private Long idObraExportacao;

	protected static final int MENU_NORMAL = 0;
	protected static final int MENU_CONTEXTO = 1;
	private int menuSelecionado;

	private FichamentoFachada fachada;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		Log.i(CATEGORIA, "in VisualizarObras 1");
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listar_obras);

		RepositorioFichamento repo = new RepositorioFichamento(this);

		Log.i(CATEGORIA, "in VisualizarObras 2");
		fachada = new FichamentoFachada();
		Log.i(CATEGORIA, "in VisualizarObras 3");
		ListView list = atualizarListaDeObras();
		Log.i(CATEGORIA, "in VisualizarObras 6");
		list.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Log.i(CATEGORIA, "in VisualizarObras 8");
				Intent it = new Intent(ListarObrasActivity.this,
						ListarFichamentosActivity.class);
				Log.i(CATEGORIA, "in VisualizarObras 9");
				Bundle params = new Bundle();
				params.putLong("idObra", obras.get(position).id);
				Log.i(CATEGORIA, "in VisualizarObras 10");
				it.putExtras(params);
				Log.i(CATEGORIA, "in VisualizarObras 11");
				startActivity(it);
				Log.i(CATEGORIA, "in VisualizarObras 12");
			}
		});
		Log.i(CATEGORIA, "in VisualizarObras 7");
	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		menuSelecionado = MENU_CONTEXTO;
		if (v.getId() == R.id.listarObrasView) {
			AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
			menu.setHeaderTitle("Menu");
			String[] menuItems = getResources().getStringArray(R.array.menuContextoObra);
			for (int i = 0; i < menuItems.length; i++) {
				menu.add(Menu.NONE, i, i, menuItems[i]);
			}
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		menuSelecionado = MENU_NORMAL;
		MenuItem mn = menu.add(0, INSERIR, 0, "Inserir Novo");
		mn.setIcon(R.drawable.novo);
		mn.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
		// menu.add(0, BUSCAR, 0, "Buscar").setIcon(R.drawable.pesquisar);
		return true;
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		// Clicou no menu

		if (menuSelecionado == MENU_NORMAL) {

			switch (item.getItemId()) {
			case INSERIR:
				// Abre a tela com o formulario para adicionar
				startActivityForResult(new Intent(this, EditarObra.class),
						INSERIR);
				// Toast.makeText(this, "Inserir Editar", Toast.LENGTH_SHORT);
				break;
			// case BUSCAR:
			// // Abre a tela para buscar o mes pelo mes
			// startActivity(new Intent(this, BuscarObra.class));
			// //Toast.makeText(this, "Inserir Editar", Toast.LENGTH_SHORT);
			// break;
			}
			return true;

		} else {
			
			AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
					.getMenuInfo();

			Log.i(CATEGORIA, "menuItemId=" + item.getItemId());
			switch (item.getItemId()) {
			case EDITAR:
				Intent itEditarObra = new Intent(this, EditarObra.class);
				Bundle params = new Bundle();
				Log.i(CATEGORIA, "idObra=" + obras.get(info.position).id);
				params.putLong("idObra", obras.get(info.position).id);
				itEditarObra.putExtras(params);
				// Abre a tela com o formulario para adicionar
				startActivityForResult(itEditarObra, EDITAR);
				// Toast.makeText(this, "Inserir Editar", Toast.LENGTH_SHORT);
				break;
			case REMOVER:
				// Abre a tela para buscar o mes pelo mes
				// startActivity(new Intent(this, BuscarObra.class));
				idObraRemocao = obras.get(info.position).id;
				removerObra();
				// Toast.makeText(this, "Inserir Editar", Toast.LENGTH_SHORT);
				break;
//			case EXPORTAR:
//				// Abre a tela para buscar o mes pelo mes
//				// startActivity(new Intent(this, BuscarObra.class));
//				Intent itEditarObra = new Intent(this, EditarObra.class);
//				Bundle params = new Bundle();
//				Log.i(CATEGORIA, "idObra=" + obras.get(info.position).id);
//				params.putLong("idObra", obras.get(info.position).id);
//				itEditarObra.putExtras(params);
//				startActivityForResult(itEditarObra, EDITAR);
//				// Toast.makeText(this, "Inserir Editar", Toast.LENGTH_SHORT);
//				break;
			}
			menuSelecionado = MENU_NORMAL;
			return true;
		}
	}

	protected void onActivityResult(int codigo, int resultado, Intent intent) {
		atualizarListaDeObras();
	}

	private ListView atualizarListaDeObras() {
		obras = fachada.recuperarObras();
		str_obras = new ArrayList<String>();
		for (int i = 0; i < obras.size(); i++) {
			str_obras.add(obras.get(i).texto);
		}

		ListView list = (ListView) findViewById(R.id.listarObrasView);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				R.layout.listar_obra, str_obras);
		list.setAdapter(adapter);

		registerForContextMenu(list);

		return list;
	}

	private void removerObra() {
		AlertDialog.Builder dialog = new AlertDialog.Builder(this);
		dialog.setMessage("Deseja realmente remover esta obra?");
		dialog.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface di, int arg) {
				Log.i(CATEGORIA, "Sim");
				fachada.excluirObra(idObraRemocao);
				atualizarListaDeObras();
			}
		});

		// botao nao executa algo se o botao nao for pressionado
		dialog.setNegativeButton("Nao", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface di, int arg) {
				Log.i(CATEGORIA, "Nao");
			}
		});
		dialog.setTitle("Aviso");
		dialog.show();
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();

		// Fecha o banco
		RepositorioFichamento.fechar();
	}
}